package com.chuxing.security.controller;

import cn.dev33.satoken.stp.StpUtil;
import com.chuxing.config.PermissionsState;
import com.chuxing.domain.Result;
import com.chuxing.exception.UnauthorizedException;
import com.chuxing.security.service.ImageService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author LiuQi
 * @create 2024-11-29-下午10:21
 */
@RestController
@RequestMapping("/image")
@Tag(name = "图片服务", description = "图片服务相关接口")
@RequiredArgsConstructor
public class ImageController {
    private static final Logger log = LoggerFactory.getLogger(ImageController.class);
    private final ImageService imageService;

    /**
     * 上传图片接口
     *
     * 该方法用于处理用户上传的图片文件，并返回上传成功后的图片URL
     * 它首先检查用户是否已登录，然后调用imageService的uploadImage方法来上传图片
     *
     * @param file 用户上传的图片文件，类型为MultipartFile，表示通过HTTP POST请求上传的文件
     * @return 返回一个Result对象，其中包含上传成功消息和图片的URL
     * @throws UnauthorizedException 如果用户未登录，抛出未授权异常
     */
    @Operation( summary = "上传图片", description = "上传图片")
    @PostMapping("uploadImage")
    public Result<String> uploadImage(MultipartFile file) {
        log.info("上传图片");
        // 检查用户是否已登录，如果未登录则抛出未授权异常
        if(!StpUtil.isLogin()){
            throw new UnauthorizedException(PermissionsState.NOT_LOGIN);
        }
        // 调用imageService的uploadImage方法上传图片，并获取上传后的图片URL
        String url = imageService.uploadImage(file);
        // 返回上传成功消息和图片的URL
        return Result.success("上传成功",url);
    }
    @Operation( summary = "获取图片", description = "根据URL获取图片")
    @GetMapping("/{id}")
    public void getImage(@PathVariable("id") String URL, HttpServletResponse response) {
        log.info("根据URL获取图片，参数为：{}", URL);
        // 检查用户是否已登录，如果未登录则抛出未授权异常
       if (!StpUtil.isLogin()) {
           throw new UnauthorizedException(PermissionsState.NOT_LOGIN);
        }
        imageService.getImage(URL,response);
    }


}
